package com.syh.jn.scm.domain.supplier.entity.sale;

import cn.redscarf.commons.util.bean.ExtBeanUtils;
import cn.redscarf.commons.util.validator.ValidationUtils;
import com.syh.core.ddd.domain.AbstractEntity;
import com.syh.jn.scm.dto.supplier.sale.SaleReturnOrderMto;
import com.syh.jn.scm.dto.supplier.sale.SaleReturnOrderSto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 销售退货单项实体
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SaleReturnOrderItem extends AbstractEntity<Long> {

  //用于新增
  protected SaleReturnOrderItem(SaleReturnOrderSto.SaleReturnOrderItemSto itemSto) {
    ValidationUtils.validate(itemSto);
    ExtBeanUtils.copyProperties(itemSto, this, false);
    //物流相关数量记录初始为0
    this.generatedQuantity = BigDecimal.ZERO;
    this.returnOutedQuantity = BigDecimal.ZERO;
    this.returnInQuantity = BigDecimal.ZERO;
    this.returnTotalAmount = this.price.multiply(this.returnQuantity).setScale(2,RoundingMode.HALF_UP);//退货金额
  }

  //用于修改
  protected SaleReturnOrderItem(SaleReturnOrderMto.SaleReturnOrderItemMto itemMto) {
    ValidationUtils.validate(itemMto);
    ExtBeanUtils.copyProperties(itemMto, this, false);
    //物流相关数量记录初始为0
    this.generatedQuantity = BigDecimal.ZERO;
    this.returnOutedQuantity = BigDecimal.ZERO;
    this.returnInQuantity = BigDecimal.ZERO;
    this.returnTotalAmount = this.price.multiply(this.returnQuantity).setScale(2,RoundingMode.HALF_UP);//退货金额
  }

  //计算已入库总额
  protected BigDecimal calculateTotalReturnInAmount(){
    this.returnTotalInAmount = this.price.multiply(this.returnInQuantity).setScale(2,RoundingMode.HALF_UP);
    return this.returnTotalInAmount;
  }

  /**
   * 商品ID
   */
  private Long goodsId;
  /**
   * 销售退货单id
   */
  private Long saleReturnOrderId;
  /**
   * orderItemId外键
   */
  private Long orderItemId;
  /**
   * 商品名称
   */
  private String goodsName;
  /**
   * 商品编码
   */
  private String goodsCode;
  /**
   * 商品分类ID
   */
  private Long categoryId;
  /**
   * 品牌ID
   */
  private Long brandId;
  /**
   * 品牌名称
   */
  private String brandName;
  /**
   * 所属种类,应用分类编码
   */
  private String categoryCode;
  /**
   * 所属种类名称
   */
  private String categoryName;
  /**
   * 计量单位
   */
  private String units;
  /**
   * 条码
   */
  private String codeBar;
  /**
   * 所属种类,应用分类的父类目录
   */
  private String categoryCatalogCode;
  /**
   * -1 辅助商品  1  基础商品
   */
  private Short isDefaultGoods;
  /**
   * 与基础商品转换率（如果是基础商品 则等于1）
   */
  private BigDecimal conversionRate;
  /**
   * 规格
   */
  private String specName;
  /**
   * 单价
   */
  private BigDecimal price;
  /**
   * 采购数量
   */
  private BigDecimal quantity;
  /**
   * 下游客户收货数量
   */
  private BigDecimal inQuantity;
  /**
   * 发货数量
   */
  private BigDecimal outQuantity;
  /**
   * 商品总额
   */
  private BigDecimal totalAmount;
  /**
   * 退货订单数量
   */
  private BigDecimal returnQuantity;
  /**
   * 物流单生成数量
   */
  private BigDecimal generatedQuantity;
  /**
   * 商品已发货的退货数量
   */
  private BigDecimal returnOutedQuantity;
  /**
   * 退货订单商品金额
   */
  private BigDecimal returnTotalAmount;
  /**
   * 退货单发货数量
   */
  private BigDecimal returnOutQuantity;
  /**
   * 退货单发货商品金额
   */
  private BigDecimal returnTotalOutAmount;
  /**
   * 退货签收数量
   */
  private BigDecimal returnInQuantity;
  /**
   * 退货签收商品金额
   */
  private BigDecimal returnTotalInAmount;
  /**
   * 备注
   */
  private String remark;
  /**
   * 退货原因id
   */
  private Long returnReasonId;
}
